﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data;

using QLTTAN.BLL;
using QLTTAN.DTO;
namespace QLTTAN.Form
{
    public partial class frmChuongTrinhHoc : DevExpress.XtraEditors.XtraForm
    {
        ChuongTrinhHocBLL CTH_BLL;
        LoaiChuongTrinhBLL LCT_BLL;
        TrinhDoBLL TD_BLL;

        int MaChuongTrinhHocSelected = -1;

        bool isInsert = false;

        public frmChuongTrinhHoc()
        {
            InitializeComponent();
        }

        private void FillDataInLookUpEditLoaiChuongTrinh()
        {
            try
            {
                lookUpEditLoaiChuongTrinh.Properties.DataSource = LCT_BLL.LoaiChuongTrinh_Load();
                lookUpEditLoaiChuongTrinh.Properties.ValueMember = "MaLoaiCT";
                lookUpEditLoaiChuongTrinh.Properties.DisplayMember = "TenLoaiCT";
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }     
        }

        private void FillDataInLookUpEditTrinhDo()
        {
            try
            {
                lookUpEditTrinhDo.Properties.DataSource = TD_BLL.TrinhDo_Load();
                lookUpEditTrinhDo.Properties.ValueMember = "MaTrinhDo";
                lookUpEditTrinhDo.Properties.DisplayMember = "TenTrinhDo";
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }           
        }

        private void SetEnableGroupThongTinChuongTrinhHoc(bool isEnable)
        {
            txtTenChuongTrinh.Enabled = isEnable;
            lookUpEditLoaiChuongTrinh.Enabled = isEnable;
            lookUpEditTrinhDo.Enabled = isEnable;
            txtHocPhi.Enabled = isEnable;

            btnLuu.Enabled = isEnable;
            btnHuy.Enabled = isEnable;

            btnLoaiChuongTrinh.Enabled = isEnable;
            btnTrinhDo.Enabled = isEnable;
        }

        private void frmChuongTrinhHoc_Load(object sender, EventArgs e)
        {
            CTH_BLL = new ChuongTrinhHocBLL();
            LCT_BLL = new LoaiChuongTrinhBLL();
            TD_BLL = new TrinhDoBLL();

            FillDataInLookUpEditLoaiChuongTrinh();
            FillDataInLookUpEditTrinhDo();

            try
            {
                gridCtrlChuongTrinhHoc.DataSource = CTH_BLL.ChuongTrinhHoc_Load();
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            SetEnableGroupThongTinChuongTrinhHoc(false);
        }

        private void btnLoaiChuongTrinh_Click(object sender, EventArgs e)
        {
            frmLoaiChuongTrinh frmLCT = new frmLoaiChuongTrinh();
            frmLCT.ShowDialog();

            FillDataInLookUpEditLoaiChuongTrinh();
        }

        private void btnTrinhDo_Click(object sender, EventArgs e)
        {
            frmTrinhDo frmTD = new frmTrinhDo();
            frmTD.ShowDialog();

            FillDataInLookUpEditTrinhDo();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            string error = "";

            if (txtTenChuongTrinh.Text.Trim().Equals(""))
            {
                error += "Bạn chưa nhập tên chương trình học. \r\n";
            }
            if (lookUpEditLoaiChuongTrinh.EditValue == null)
            {
                error += "Bạn chưa chọn loại chương trình. \r\n";
            }
            if (lookUpEditTrinhDo.EditValue == null)
            {
                error += "Bạn chưa chọn trình độ. \r\n";
            }
            if (txtHocPhi.Text.Trim().Equals(""))
            {
                error += "Bạn chưa nhập học phí. \r\n";
            }

            if (!error.Equals(""))
            {
                XtraMessageBox.Show(error, "Thông báo!!!", MessageBoxButtons.OK);
                return;
            }

            ChuongTrinhHocDTO CTH_DTO = new ChuongTrinhHocDTO();
            CTH_DTO.TenChuongTrinh = txtTenChuongTrinh.Text.Trim();
            CTH_DTO.MaLoaiCT = int.Parse(lookUpEditLoaiChuongTrinh.EditValue.ToString());
            CTH_DTO.MaTrinhDo = int.Parse(lookUpEditTrinhDo.EditValue.ToString());
            CTH_DTO.HocPhi = Decimal.Parse(txtHocPhi.Text.Trim());

            try
            {
                if (isInsert)
                {
                    if (CTH_BLL.ChuongTrinhHoc_Insert(CTH_DTO) > 0)
                        XtraMessageBox.Show("Lưu dữ liệu thành công.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                        XtraMessageBox.Show("Lưu dữ liệu thất bại.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    CTH_DTO.MaChuongTrinh = MaChuongTrinhHocSelected;

                    if (CTH_BLL.ChuongTrinhHoc_Update(CTH_DTO) > 0)
                        XtraMessageBox.Show("Lưu dữ liệu thành công.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                        XtraMessageBox.Show("Lưu dữ liệu thất bại.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            frmChuongTrinhHoc_Load(sender, e);
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            if (XtraMessageBox.Show("Bạn có chắc chắn thoát khỏi thao tác này?", "Thông báo!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                frmChuongTrinhHoc_Load(sender, e);
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            SetEnableGroupThongTinChuongTrinhHoc(true);

            txtTenChuongTrinh.Text = string.Empty;
            lookUpEditLoaiChuongTrinh.ItemIndex = -1;
            lookUpEditTrinhDo.ItemIndex = -1;
            txtHocPhi.Text = string.Empty;

            isInsert = true;
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (MaChuongTrinhHocSelected == -1)
            {
                XtraMessageBox.Show("Bạn chưa chọn chương trình học muốn sửa. \r\n", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }


            SetEnableGroupThongTinChuongTrinhHoc(true);

            isInsert = false;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (MaChuongTrinhHocSelected == -1)
            {
                XtraMessageBox.Show("Bạn chưa chọn chương trình học muốn xóa. \r\n", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {

                if (XtraMessageBox.Show("Bạn có chắc chắn muốn xóa?", "Thông báo!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    ChuongTrinhHocDTO CTH_DTO = new ChuongTrinhHocDTO();
                    CTH_DTO.MaChuongTrinh = MaChuongTrinhHocSelected;

                    if (CTH_BLL.ChuongTrinhHoc_Delete(CTH_DTO) > 0)
                        XtraMessageBox.Show("Xóa dữ liệu thành công", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                        XtraMessageBox.Show("Xóa dữ liệu thất bại", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    frmChuongTrinhHoc_Load(sender, e);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void gridViewChuongTrinhHoc_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            if (gridViewChuongTrinhHoc.FocusedRowHandle >= 0)
            {
                SetEnableGroupThongTinChuongTrinhHoc(false);

                DataRow row = gridViewChuongTrinhHoc.GetDataRow(gridViewChuongTrinhHoc.FocusedRowHandle);

                if(row != null)
                {
                    MaChuongTrinhHocSelected = int.Parse(row["MaChuongTrinh"].ToString());
                    txtTenChuongTrinh.Text = row["TenChuongTrinh"].ToString();
                    lookUpEditLoaiChuongTrinh.ItemIndex = lookUpEditLoaiChuongTrinh.Properties.GetDataSourceRowIndex("TenLoaiCT", row["TenLoaiCT"]);
                    lookUpEditTrinhDo.ItemIndex = lookUpEditTrinhDo.Properties.GetDataSourceRowIndex("TenTrinhDo", row["TenTrinhDo"]);
                    txtHocPhi.Text = row["HocPhi"].ToString();
                }         
            }
            else
            {
                MaChuongTrinhHocSelected = -1;
            }
        }

        private void txtHocPhi_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !(e.KeyChar == (char)Keys.Back))
            {
                const char Delete = (char)8;
                e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
            }
        }

        private void gridViewChuongTrinhHoc_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Column.FieldName == "HocPhi")
            {
                e.DisplayText = String.Format("{0:n2} VNĐ", e.Value);
            }

            if (e.Column.FieldName == "STT")
                e.DisplayText = (e.ListSourceRowIndex + 1).ToString();
        }

    }
}